App({
  globalData: {
    userInfo: null,
    token: null,
    baseUrl: 'http://localhost:8080/api/v1' // 可根据环境配置修改
  },
  
  onLaunch() {
    // 获取本地存储的token
    const token = wx.getStorageSync('token');
    if (token) {
      this.globalData.token = token;
      // 验证token有效性
      this.validateToken();
    }
  },
  
  // 微信登录方法
  wechatLogin(userType) {
    return new Promise((resolve, reject) => {
      wx.login({
        success: (res) => {
          if (res.code) {
            wx.request({
              url: `${this.globalData.baseUrl}/auth/wechat`,
              method: 'POST',
              data: {
                code: res.code,
                userType: userType
              },
              success: (res) => {
                if (res.statusCode === 200 && res.data.data.token) {
                  // 保存token
                  this.globalData.token = res.data.data.token;
                  wx.setStorageSync('token', res.data.data.token);
                  
                  // 保存用户信息
                  this.globalData.userInfo = res.data.data.user;
                  wx.setStorageSync('userInfo', res.data.data.user);
                  
                  resolve(res.data.data.user);
                } else {
                  reject(new Error(res.data.message || '微信登录失败'));
                }
              },
              fail: (err) => {
                reject(new Error('网络请求失败'));
              }
            });
          } else {
            reject(new Error('获取微信登录凭证失败'));
          }
        },
        fail: () => {
          reject(new Error('微信登录接口调用失败'));
        }
      });
    });
  },
  
  // 手机号登录方法
  phoneLogin(phone, authValue, userType, loginType = 'password') {
    return new Promise((resolve, reject) => {
      // 构建请求数据
      const data = {
        phone: phone,
        userType: userType,
        loginType: loginType
      };
      
      // 根据登录类型设置不同的字段
      if (loginType === 'code') {
        data.code = authValue;
      } else if (loginType === 'password') {
        data.password = authValue;
      }
      
      wx.request({
        url: `${this.globalData.baseUrl}/auth/phone`,
        method: 'POST',
        data: data,
        success: (res) => {
          if (res.statusCode === 200 && res.data.data.token) {
            // 保存token
            this.globalData.token = res.data.data.token;
            wx.setStorageSync('token', res.data.data.token);
            
            // 保存用户信息
            this.globalData.userInfo = res.data.data.user;
            wx.setStorageSync('userInfo', res.data.data.user);
            
            resolve(res.data.data.user);
          } else {
            reject(new Error(res.data.message || '手机登录失败'));
          }
        },
        fail: (err) => {
          reject(new Error('网络请求失败'));
        }
      });
    });
  },
  
  // 退出登录
  logout() {
    this.globalData.userInfo = null;
    this.globalData.token = null;
    wx.removeStorageSync('token');
    wx.removeStorageSync('userInfo');
    
    // 重定向到登录页
    wx.redirectTo({
      url: '/pages/login/login'
    });
  },
  
  // 验证token有效性
  validateToken() {
    wx.request({
      url: `${this.globalData.baseUrl}/user/validate`,
      method: 'GET',
      header: {
        'Authorization': `Bearer ${this.globalData.token}`
      },
      success: (res) => {
        if (res.statusCode !== 200) {
          // token无效，清除缓存并重定向到登录页
          this.logout();
        } else {
          // 加载用户信息
          const userInfo = wx.getStorageSync('userInfo');
          if (userInfo) {
            this.globalData.userInfo = userInfo;
          }
        }
      },
      fail: () => {
        // 请求失败，可能是网络问题，不做处理
      }
    });
  },
  
  // 获取用户信息
  getUserInfo() {
    return new Promise((resolve, reject) => {
      // 如果已经有用户信息，直接返回
      if (this.globalData.userInfo) {
        resolve(this.globalData.userInfo);
        return;
      }
      
      // 本地缓存中获取
      const userInfo = wx.getStorageSync('userInfo');
      if (userInfo) {
        this.globalData.userInfo = userInfo;
        resolve(userInfo);
        return;
      }
      
      // 从服务器获取
      if (this.globalData.token) {
        wx.request({
          url: `${this.globalData.baseUrl}/user/profile`,
          method: 'GET',
          header: {
            'Authorization': `Bearer ${this.globalData.token}`
          },
          success: (res) => {
            if (res.statusCode === 200) {
              this.globalData.userInfo = res.data.data;
              wx.setStorageSync('userInfo', res.data.data);
              resolve(res.data.data);
            } else {
              reject(new Error('获取用户信息失败'));
            }
          },
          fail: () => {
            reject(new Error('网络请求失败'));
          }
        });
      } else {
        reject(new Error('未登录'));
      }
    });
  },
  
  // 通用请求方法
  request(options) {
    return new Promise((resolve, reject) => {
      wx.request({
        url: `${this.globalData.baseUrl}${options.url}`,
        method: options.method || 'GET',
        data: options.data,
        header: {
          'Content-Type': 'application/json',
          'Authorization': this.globalData.token ? `Bearer ${this.globalData.token}` : ''
        },
        success: (res) => {
          if (res.statusCode === 401) {
            // 未授权，跳转到登录页
            this.logout();
            reject(new Error('登录已过期，请重新登录'));
          } else if (res.statusCode >= 200 && res.statusCode < 300) {
            // 成功，返回data部分
            resolve(res.data.data || res.data);
          } else {
            reject(new Error(res.data.message || '请求失败'));
          }
        },
        fail: () => {
          reject(new Error('网络请求失败'));
        }
      });
    });
  },
  
  // 获取验证码
  sendVerificationCode(phone) {
    return this.request({
      url: `/auth/send-verification-code?phoneNumber=${phone}`,
      method: 'GET'
    });
  }
}) 